跳到主要内容

关于this.name 和 this._name

转载: 属性的 getter 和 setter (javascript.info)

getter/setter 可以用作“真实”属性值的包装器,以便对它们进行更多的控制。

例如,如果我们想禁止太短的 user 的 name,我们可以创建一个 setter name,并将值存储在一个单独的属性 _name 中:

let user = {

  get name() {
    return this._name;
  },

  set name(value) {
    if (value.length < 4) {
      alert("Name is too short, need at least 4 characters");
      return;
    }
    this._name = value;
  }
};

user.name = "Pete";

alert(user.name); // Pete

user.name = ""; // Name 太短了……

所以,name 被存储在 _name 属性中,并通过 getter 和 setter 进行访问。

从技术上讲,外部代码可以使用 user._name 直接访问 name。但是,这儿有一个众所周知的约定,即以下划线 "_" 开头的属性是内部属性,不应该从对象外部进行访问。